
local 主角类 = class()


function 主角类:初始化(根)
  资源 = 根.资源
 self.xy={x=100,y=100}
 self.允许运行=false
 self.格子坐标={x=0,y=0}
 self.鼠标移动=false
 self.鼠标间隔=0
 self.鼠标计时=0
 self.甲组冠军 = 资源:载入('JM.FT',"网易WDF动画",0xC4A082C0)
 self.甲组亚军 = 资源:载入('JM.FT',"网易WDF动画",0xE7706EE2)
 self.甲组季军 = 资源:载入('JM.FT',"网易WDF动画",0x6336F8B3)
 self.甲组八强 = 资源:载入('JM.FT',"网易WDF动画",0x7419201D)
 self.数据={}
end
function 主角类:更改称谓(数据)
 self.数据.称谓=数据
 end
function 主角类:添加摊位名称(数据)
if 数据==nil then
  self.摊位名称=""
else
    self.摊位名称=数据
end

 end
function 主角类:创建角色(数据)
 self.数据=数据
 self.数据=self.数据
 self.小摊位=WAS动画类.创建(addon,0xBD80E0DB)
 self.中摊位=WAS动画类.创建(addon,0x6D33D98E)
 self.大摊位=WAS动画类.创建(addon,0x74786102)
 self.摊位文字=文字类.创建(simsun,14)
 self.摊位文字:置颜色(0xFF0000FF)
 self.摊位名称=""

 窗口标题.名称=self.数据.名称
 窗口标题.id=self.数据.id
 系统处理类.数字id=self.数据.id
 self.动画=创建角色动画(self.数据.造型,self.数据.染色,self.数据.武器数据.名称,self.数据.武器数据.等级,self.数据.武器数据.类别,self.数据.武器数据.强化,self.数据.坐骑,self.数据.变身,self.数据.锦衣数据)
 self.动作="静立"
 self.方向=0
 self.允许运行=true
 self.xy={x=self.数据.地图数据.x,y=self.数据.地图数据.y}
 tp.屏幕:同步坐标()
 self.初始帧率=1.1
 self.移动帧率=1.4
 self.移动速度 = 200
 self.移动开关=false
 self.路径组={}
 self.队长动画 =WAS动画类.创建(addon,0x2231EBB4)
 self.队长开关=false
 self.发言内容={}
   self.超丰富文本 = require("Script/系统类/丰富文本")(100,100)
 :置文字(文字1)
 self.超丰富文本:添加元素("w",0xFFFFFFFF)
 self.超丰富文本:添加元素("h",0xFF000000)
 self.超丰富文本:添加元素("y",0xFFFFFF00)
 self.超丰富文本:添加元素("r",红色)
 self.超丰富文本:添加元素("g",0xFF00FF00)

  for n=0,119 do
    self.超丰富文本:添加元素(n,tp.包子表情动画[n])
  end

 end


function 主角类:添加发言内容(内容)
 -- 内容="#w/"..内容
-- print("添加发言内容")
 self.发言内容[#self.发言内容+1]={起始=0,开关=false,长度=string.len(内容 .. '  \n\n')}
 self.发言内容[#self.发言内容].开关=true
 self.发言内容[#self.发言内容].起始=os.time()
 self.超丰富文本:清空()
 self.超丰富文本:添加文本(内容)

 end

function 主角类:添加队长动画(开关)
  self.队长开关=开关
 end





function 主角类:更改武器(数据)
  self.数据=数据
 self.动画=创建角色动画(self.数据.造型,self.数据.染色,self.数据.武器数据.名称,self.数据.武器数据.等级,self.数据.武器数据.类别,self.数据.武器数据.强化,self.数据.坐骑,self.数据.变身,self.数据.锦衣数据)
 end
function 主角类:更改染色(数据)
  self.数据.染色=数据
  self.数据.染色=self.数据.染色
  self.动画=创建角色动画(self.数据.造型,self.数据.染色,self.数据.武器数据.名称,self.数据.武器数据.等级,self.数据.武器数据.类别,self.数据.武器数据.强化,self.数据.坐骑,self.数据.变身,self.数据.锦衣数据)
 end
function 主角类:更新气血数据(数据)
 self.数据2=数据
 self.数据1=self.数据2
  for n, v in pairs(self.数据1) do

       self.数据[n]=self.数据1[n]
   end
 end
function 主角类:播放升级动画()
 self.升级动画=WAS动画类.创建(addon,0x9B3AF4E5)
 self.升级动画.帧率=0.07 --.动画


 end



function 主角类:鼠标转地图坐标()
  return 鼠标-tp.屏幕.xy
 end

function 主角类:更新(dt)
 self.甲组冠军:更新(dt)
self.甲组亚军:更新(dt)
self.甲组季军:更新(dt)
self.甲组八强:更新(dt)
 self.格子坐标.x,self.格子坐标.y=self.xy.x/20,self.xy.y/20
 if self.允许运行==false  then return 0 end

 self.动画:更新(dt,self.动作)
 if self.升级动画~=nil then
      self.升级动画:更新(dt)
      if self.升级动画.当前帧==self.升级动画.结束帧 then self.升级动画=nil end --.动画
     end
  if 1==2 and self.鼠标移动 and os.time()-self.持续移动>=1 then
      self.是否移动 = true
    self.目标xy = 鼠标-tp.屏幕.xy
    self:获取移动路径(self.目标xy,dt)
    self.持续移动=os.time()

  elseif 引擎.鼠标弹起(KEY.LBUTTON) and
    tp.主界面.界面数据[3].拿起对象==0 and
    tp.地图:重叠检测() and  tp:可通行() and
    tp.窗口.人物框:检查点(鼠标.x,鼠标.y)==false and
    引擎.场景.窗口.聊天框类:界面重叠()==false  and
    tp.主界面:界面重叠()==false and
    tp.屏幕.玩家类.鼠标重叠==false and
    (tp.地图.小地图.是否显示==false or (tp.地图.小地图.存在==false or tp.地图.小地图.图片:检查点(鼠标.x,鼠标.y)==false)) and
    tp.地图.npc选中==0 and
    not tp.窗口.时辰:检查点(鼠标.x,鼠标.y) then
      if(tp.主界面.top_for_map ~= 0) then
          tp.主界面.top_for_map = 0
      else
        self.是否移动 = true
        self.目标xy = 鼠标-tp.屏幕.xy
        self.目标xy.x,self.目标xy.y=math.floor(self.目标xy.x),math.floor(self.目标xy.y)
        self:获取移动路径(self.目标xy,dt)
      end
    elseif 引擎.鼠标弹起(键盘符号.左键) and tp.地图.小地图.是否显示 and tp.地图.小地图.图片:检查点(鼠标.x,鼠标.y)  then
       local mx, my = 鼠标.x-tp.地图.小地图.x, 鼠标.y-tp.地图.小地图.y
       if(mx > 18 and my > 16 and mx < tp.地图.小地图.宽度 - 18 and my < tp.地图.小地图.高度 - 16)then
         self.目标xy = 生成XY(math.floor((mx - 18)*tp.地图.小地图.小地图.x),math.floor((my - 16)*tp.地图.小地图.小地图.y))
         if self.目标xy.x>tp.地图.宽度 then self.目标xy.x=tp.地图.宽度-10 end
         if self.目标xy.y>tp.地图.高度 then self.目标xy.y=tp.地图.高度-10 end
         self:获取移动路径(self.目标xy,dt)
      end
   end
  if self.移动开关 then
    self:移动事件(dt)
    end


  if 组队开关 then

   if self.动画[self.动作]:是否选中(鼠标.x,鼠标.y) and 引擎.鼠标弹起(左键) then
      组队开关=false
      鼠标动画.显示序列=1
     客户端:发送数据(0,2,11,"9",1)
     end
   end
  if self.队长开关 then self.队长动画:更新(dt) end

end


function 主角类:移动事件(dt)
 if self.路径组==nil then return 0 end

  if #self.路径组>0 then
      self.临时xy={x=self.路径组[1].x*20,y=self.路径组[1].y*20}
          self.移动速度=170*dt
       self.临时速度=取移动坐标 (self.xy,self.临时xy,self.移动速度)
      self.角度= 取两点角度(self.xy,self.临时速度)
      self.临时方向=self.方向
      self.方向=角度算方向(self.角度,self.数据.变身)
      self.动作="行走"

     if self.临时方向~=self.方向 then
         self.动画:换方向(self.动作,self.方向,1)
       end
        if 1==2 then -- and 地图.寻路:检查点(self.临时速度.x/20,self.临时速度.y/20)==false then
          tp.地图.寻路:置状态(self.临时速度.x/20,self.临时速度.y/20,true)

          end
        if 1==2  then --and 地图.寻路:检查点(self.临时速度.x/20,self.临时速度.y/20)==false then --移动至障碍格子前
         self.路径组={}
         self.移动开关=false
         self.动作="静立"
         self.动画:置帧率(self.动作,self.初始帧率)
         self.动画:换方向(self.动作,self.方向)
         客户端:发送数据(math.floor(self.xy.x),3,4,math.floor(self.xy.y),1)
         return 0

       elseif ((取两点距离(self.xy,self.临时xy) >= self.移动速度 ))   then


         self.xy=self.临时速度
         return 0
        else
         table.remove(self.路径组,1)
         if #self.路径组<=0 and self.鼠标移动==false then
           self.路径组={}
           self.移动开关=false
            self.动作="静立"
            self.动画:置帧率(self.动作,self.初始帧率)
            self.动画:换方向(self.动作,self.方向)
            客户端:发送数据(math.floor(self.xy.x),4,4,math.floor(self.xy.y),1)
           end

         end

     end
  if 角色移动-self.同步时间>=1 then
     self.同步时间=角色移动

     end

 end


function 主角类:获取移动路径(目标,dt)
 self.临时格子={x=self.xy.x,y=self.xy.y}
  鼠标动画:添加点击动画(目标.x,目标.y)
  self.临时格子1={x=目标.x,y=目标.y}
 self.路径组1=tp.地图:寻路(self.临时格子,self.临时格子1) --.路径类
 if self.路径组1==nil or #self.路径组1==0 then return 0 end
 客户端:发送数据(0,1,4,目标.x.."*-*"..目标.y,1)
 self.路径组1={}
 end
function 主角类:添加队友路径(目标)
 self.路径数据1=目标
 self.路径数据=self.路径数据1
 self.要求距离=50*self.路径数据.序列
 if 取两点距离(self.xy,{x=self.路径数据.x1,y=self.路径数据.x2})>=self.要求距离 then
   客户端:发送数据(0,7,4,self.路径数据.目标,1)
   end
 end

function 主角类:获取移动路径1(目标,dt)
 self.临时格子={x=self.xy.x,y=self.xy.y}
 if tp.地图.寻路:检查点(self.临时格子.x,self.临时格子.y)==false then --障碍位置下继续移动
    tp.地图.寻路:置状态(self.临时格子.x,self.临时格子.y,true)
   end
  鼠标动画:添加点击动画(目标.x,目标.y)
  self.临时格子1={x=目标.x,y=目标.y}
 self.路径组=tp.地图:寻路(self.临时格子,self.临时格子1) --.路径类
 if #self.路径组==0 then return 0 end
 客户端:发送数据(0,5,4,目标.x.."*-*"..目标.y,1)
 self.路径组={}
 end

function 主角类:添加移动路径(内容)

 self.移动目标=分割文本(内容,"*-*")
 self.临时格子1={x=self.移动目标[1],y=self.移动目标[2]}
 self.临时格子={x=self.xy.x,y=self.xy.y}
 self.路径组=tp.地图:寻路(self.临时格子,self.临时格子1) --路径类
 if self.路径组==nil then return 0 end
 self.角度= 取两点角度(self.xy,{x=self.路径组[1].x*20,y=self.路径组[1].y*20})
 self.临时方向=角度算方向(self.角度,self.数据.变身)
 self.动作="行走"
 self.动画:置帧率(self.动作,self.移动帧率)
 self.移动开关=true
 self.同步时间=角色移动

 end

function 主角类:更改坐标(内容)

  self:停止移动()
 self.xy={x=内容.x,y=内容.y}
 tp.屏幕:同步坐标(dt,x,y)

 end
function 主角类:停止移动()
 self.路径组={}
 self.移动开关=false
 if self.动画==nil then return 0 end
 self.动作="静立"
 self.动画:置帧率(self.动作,self.初始帧率)
 self.动画:换方向(self.动作,self.方向)


 end



function 主角类:添加移动路径2(内容)

 self.路径组=内容
 if #self.路径组==0 then

      if self.动作=="行走" then
          self.路径组={}
          self.移动开关=false
          self.动作="静立"
          self.动画:置帧率(self.动作,self.初始帧率)
          self.动画:换方向(self.动作,self.方向)
          客户端:发送数据(1005,self.xy,1)


         end
     return 0
   end
 self.角度= 取两点角度(self.xy,{x=self.路径组[1].x*20,y=self.路径组[1].y*20})
 self.临时方向=角度算方向(self.角度,self.数据.变身)
 self.动作="行走"
 self.动画:置帧率(self.动作,self.移动帧率)

 self.移动开关=true
 self.同步时间=角色移动

 end

function 主角类:优化寻路结果(dt,路径组)



  local 重组表={}
  local 上一个终点=1
  self.临时测试=路径组
  for i,v in ipairs(路径组) do
    local 最远
    for z,h in ipairs(路径组) do
      if i==上一个终点 and z>上一个终点 then
       -- print(v.x,v.y)
        local 起点=生成XY(v.x*20,v.y*20)
        local 目标=生成XY(h.x*20,h.y*20)
       -- print(self:判断直线障碍(起点,目标,dt))
        if 1==2 and self:判断直线障碍(起点,目标,dt)==true then
          最远=z
        else
          if z == #路径组 and 最远==nil then
            最远=上一个终点+1
          end
        end
      end
    end
    if 最远~=nil and 最远<=#路径组 then
      table.insert(重组表,路径组[最远])
      上一个终点=最远
      最远=nil
    end


    if 上一个终点 == #路径组 then
      --路径组=重组表
      --return 重组表
    end

  end
 if #重组表~=0 then
  -- print(#重组表,重组表[#重组表].x,重组表[#重组表].y,#self.临时测试,self.临时测试[#self.临时测试].x,self.临时测试[#self.临时测试].y)
  end

  return 重组表
 end
function 主角类:显示(x,y)

 if self.动画==nil then return 0 end
 self.动画:显示(self.动作,self.xy.x+tp.屏幕.xy.x,self.xy.y+tp.屏幕.xy.y)
 if self.升级动画~=nil then
      self.升级动画:显示(self.xy.x+tp.屏幕.xy.x,self.xy.y+tp.屏幕.xy.y)
     end
 if self.数据.称谓=="" then
    显示人物平常名称(窗口标题.名称,self.xy.x+tp.屏幕.xy.x-3,self.xy.y+tp.屏幕.xy.y)
    else
      if self.数据.称谓== "武神坛甲组冠军" then
        self.甲组冠军:显示(self.xy.x+tp.屏幕.xy.x,self.xy.y+tp.屏幕.xy.y)
        显示人物平常名称(窗口标题.名称,self.xy.x+tp.屏幕.xy.x,self.xy.y+tp.屏幕.xy.y+3)
      elseif  self.数据.称谓== "武神坛甲组亚军" then
        self.甲组亚军:显示(self.xy.x+tp.屏幕.xy.x,self.xy.y+tp.屏幕.xy.y)
        显示人物平常名称(窗口标题.名称,self.xy.x+tp.屏幕.xy.x,self.xy.y+tp.屏幕.xy.y+3)
      elseif  self.数据.称谓== "武神坛甲组季军" then
        self.甲组季军:显示(self.xy.x+tp.屏幕.xy.x,self.xy.y+tp.屏幕.xy.y)
        显示人物平常名称(窗口标题.名称,self.xy.x+tp.屏幕.xy.x,self.xy.y+tp.屏幕.xy.y+3)
      elseif  self.数据.称谓== "武神坛甲组八强" then
        self.甲组八强:显示(self.xy.x+tp.屏幕.xy.x,self.xy.y+tp.屏幕.xy.y)
        显示人物平常名称(窗口标题.名称,self.xy.x+tp.屏幕.xy.x,self.xy.y+tp.屏幕.xy.y+3)
      else
      显示人物称谓(self.数据.称谓,self.xy.x+tp.屏幕.xy.x-5,self.xy.y+tp.屏幕.xy.y-10)
      显示人物平常名称(窗口标题.名称,self.xy.x+tp.屏幕.xy.x-1,self.xy.y+tp.屏幕.xy.y+8)
  end
 end
 if self.摊位名称~="" then

    if string.len(self.摊位名称)<=4 then

     self.小摊位:显示(self.xy.x+tp.屏幕.xy.x,self.xy.y+tp.屏幕.xy.y-100)
     self.摊位文字:显示(self.xy.x+tp.屏幕.xy.x-13+(4-string.len(self.摊位名称))*1.8,self.xy.y+tp.屏幕.xy.y-114,self.摊位名称)
     if self.小摊位:取包围盒():检查点(鼠标.x,鼠标.y) and tp.主界面:界面重叠()==false and 引擎.鼠标弹起(右键) then

       客户端:发送数据(98,1,44,"5",1)

       end
   elseif string.len(self.摊位名称)<=8 then

     self.中摊位:显示(self.xy.x+tp.屏幕.xy.x,self.xy.y+tp.屏幕.xy.y-100)
     self.摊位文字:显示(self.xy.x+tp.屏幕.xy.x-25+(8-string.len(self.摊位名称))*1.8,self.xy.y+tp.屏幕.xy.y-114,self.摊位名称)
     if self.中摊位:取包围盒():检查点(鼠标.x,鼠标.y) and tp.主界面:界面重叠()==false and 引擎.鼠标弹起(右键) then

       客户端:发送数据(98,1,44,"5",1)

       end
    else

     self.大摊位:显示(self.xy.x+tp.屏幕.xy.x,self.xy.y+tp.屏幕.xy.y-100)
     self.摊位文字:显示(self.xy.x+tp.屏幕.xy.x-40+(12-string.len(self.摊位名称))*1.8,self.xy.y+tp.屏幕.xy.y-114,self.摊位名称)
     if self.大摊位:取包围盒():检查点(鼠标.x,鼠标.y) and tp.主界面:界面重叠()==false and 引擎.鼠标弹起(右键) then

       客户端:发送数据(98,1,44,"5",1)

       end


      end



   end

 if 取两点距离({x=8274,y=3426},self.xy)>400 then

   end
 if self.队长开关 then self.队长动画:显示(self.xy.x+tp.屏幕.xy.x,self.xy.y+tp.屏幕.xy.y-90) end

 if #self.发言内容>0 then
   self.临时宽度=math.floor(self.发言内容[1].长度)-2
   if self.临时宽度>12 then

     self.临时宽度=12

     end

   self.偏差宽度=self.发言内容[1].长度*3+5
   if self.偏差宽度>60 then

     self.偏差宽度=60

     end
   self.偏差高度=math.floor(self.发言内容[1].长度*0.1+1)*10+100



   信息提示:显示(2,self.临时宽度,math.floor(self.发言内容[1].长度*0.1)+2,self.xy.x+tp.屏幕.xy.x-self.偏差宽度,self.xy.y+tp.屏幕.xy.y-self.偏差高度)
   self.偏差宽度=self.发言内容[1].长度*3+5
   if self.偏差宽度>60 then

     self.偏差宽度=60

     end
   self.偏差高度=math.floor(self.发言内容[1].长度*0.1+1)*10+100-5
   self.超丰富文本:显示(self.xy.x+tp.屏幕.xy.x-self.偏差宽度+5,self.xy.y+tp.屏幕.xy.y-self.偏差高度)
   if os.time()-self.发言内容[1].起始>=5 then

      table.remove(self.发言内容,1)

     end

    end


     tp.屏幕.玩家类:摊位显示()

end

return 主角类